package br.com.imob.dao;

import br.com.imob.modelo.AcompanhamentoFisico;

import java.util.List;

/** @user Gilton Nascimento
 *  @since 12:16:50 02/02/2011 2011
 *  @version 
 */

public class AcompanhamentoFisicoDao extends GenericDao {


	public AcompanhamentoFisicoDao() {  }
	
	public Integer adicionarAcFisico(AcompanhamentoFisico acfisico) {
		saveOrUpdatePojo(acfisico);
		return acfisico.getAcfisicoId();
	}
	
	public void removerAcFisico(AcompanhamentoFisico acfisico) {
		removerPojo(acfisico);
	}

	/* Precisa definir o ID */
	public void atualizarAcFisico(AcompanhamentoFisico recupera) {
		saveOrUpdatePojo(recupera);
	}

	/**
	 * Editar um AcFisico
	 * @param String oldAcFisico
	 * @param String newAcFisico
	 */
	public void atualizarAcFisico(String tpStr, String oldAcFisico, String newAcFisico ) {
		if( "data".equalsIgnoreCase(tpStr) ) {
			if ( ( !"".equalsIgnoreCase(oldAcFisico) && oldAcFisico != null )
					&& ( !"".equalsIgnoreCase(newAcFisico) && newAcFisico != null ) ) 
				atualizarAcFisico( getAcFisicoQNamedData(oldAcFisico), new AcompanhamentoFisico(tpStr, newAcFisico) );
		}
		
		if( "descricao".equalsIgnoreCase(tpStr) ) {
			if ( ( !"".equalsIgnoreCase(oldAcFisico) && oldAcFisico != null )
					&& ( !"".equalsIgnoreCase(newAcFisico) && newAcFisico != null ) ) 
				atualizarAcFisico( getAcFisicoQNamedDesc(oldAcFisico), new AcompanhamentoFisico(tpStr, newAcFisico) );
		}
		if( "referencia".equalsIgnoreCase(tpStr) ) {
			if ( ( !"".equalsIgnoreCase(oldAcFisico) && oldAcFisico != null )
					&& ( !"".equalsIgnoreCase(newAcFisico) && newAcFisico != null ) ) 
				atualizarAcFisico( getAcFisicoQNamedReferenciaImovel(oldAcFisico), new AcompanhamentoFisico(tpStr, newAcFisico) );
		}
		if( "status".equalsIgnoreCase(tpStr) ) {
			if ( ( !"".equalsIgnoreCase(oldAcFisico) && oldAcFisico != null )
					&& ( !"".equalsIgnoreCase(newAcFisico) && newAcFisico != null ) ) 
				atualizarAcFisico( getAcFisicoQNamedStatus(oldAcFisico), new AcompanhamentoFisico(tpStr, newAcFisico) );
		}
	}

	/* Precisa definir qual atribuito sera a chave a identificar 
	 * a tupla a ser alterada */
	public void atualizarAcFisico(AcompanhamentoFisico recuperar, AcompanhamentoFisico alterar) {
		recuperar = retriveAcFisico(recuperar);
		
		if(alterar.getDescricao() != null)
			recuperar.setDescricao(alterar.getDescricao());
		if(alterar.getDataAcompanhamento() != null)
			recuperar.setDataAcompanhamento(alterar.getDataAcompanhamento());
		if(alterar.getReferenciaImovel() != null)
			recuperar.setReferenciaImovel(alterar.getReferenciaImovel());
		if(alterar.getStatus() != null)
			recuperar.setStatus(alterar.getStatus());
		
		saveOrUpdatePojo(recuperar);
	}
	
//	Artificio para Recuperar a Tupla de AcFisico
	protected AcompanhamentoFisico retriveAcFisico(AcompanhamentoFisico recuperar) {
		if(recuperar.getAcfisicoId() != null)
			return getAcFisico(recuperar.getAcfisicoId());
		if(recuperar.getDescricao() != null)
			return getAcFisicoQNamedDesc(recuperar.getDescricao());
		if(recuperar.getDataAcompanhamento() != null)
			return getAcFisicoQNamedData(recuperar.getDataAcompanhamento());
		if(recuperar.getReferenciaImovel() != null)
			return getAcFisicoQNamedReferenciaImovel(recuperar.getReferenciaImovel());
		if(recuperar.getStatus() != null)
			return getAcFisicoQNamedStatus(recuperar.getStatus());
		
		return recuperar;
	}
	
	
//	Consultas
	public AcompanhamentoFisico getAcFisico(Integer key) {
		return getPojoByID(AcompanhamentoFisico.class, key);
	}
	public AcompanhamentoFisico getAcFisicoByQuery(String query, Object...params) {
		return getPojoByQry(query, params);
	}
	public AcompanhamentoFisico getAcFisicoQNamedDesc(String fltrDesc) {
		return getPojoByQNamed("AcFisico.findByDescricao", fltrDesc);
	}
	public AcompanhamentoFisico getAcFisicoQNamedData(String fltrData) {
		return getPojoByQNamed("AcFisico.findByDataAcompanhamento", fltrData);
	}
	public AcompanhamentoFisico getAcFisicoQNamedReferenciaImovel(String fltrComer) {
		return getPojoByQNamed("AcFisico.findByReferenciaImovel", fltrComer);
	}
	public AcompanhamentoFisico getAcFisicoQNamedStatus(String fltrStatus) {
		return getPojoByQNamed("AcFisico.findByStatus", fltrStatus);
	}
	
	public List<AcompanhamentoFisico> getAcFisicos() {
		return (List<AcompanhamentoFisico>) getALL(AcompanhamentoFisico.class);
	}
	public List<AcompanhamentoFisico> getAcFisicosQNamedDescPRX(String fltrDesc) {
		return getListByQNamedPRX("AcFisico.findLikeByDescricao", fltrDesc);
	}
	public List<AcompanhamentoFisico> getAcFisicosQNamedDataPRX(String fltrData) {
		return getListByQNamedPRX("AcFisico.findLikeByDataAcompanhamento", fltrData);
	}
	public List<AcompanhamentoFisico> getAcFisicosQNamedReferenciaImovelPRX(String fltrReferenciaImovel) {
		return getListByQNamedPRX("AcFisico.findLikeByReferenciaImovel", fltrReferenciaImovel);
	}
	public List<AcompanhamentoFisico> getAcFisicosQNamedStatusPRX(String fltrStatus) {
		return getListByQNamedPRX("AcFisico.findLikeByStatus", fltrStatus);
	}
	public List<AcompanhamentoFisico> getAcFisicosByQuery(String query, Object...params) {
		return getListByQry(query, params);
	}
	
}